package com.atguigu.tingshu.search.service;

import co.elastic.clients.elasticsearch.core.SearchRequest;
import co.elastic.clients.elasticsearch.core.SearchResponse;
import com.atguigu.tingshu.model.search.AlbumInfoIndex;
import com.atguigu.tingshu.model.search.SuggestIndex;
import com.atguigu.tingshu.query.search.AlbumIndexQuery;
import com.atguigu.tingshu.vo.search.AlbumSearchResponseVo;

import java.util.List;
import java.util.Map;

public interface SearchService {


    void upperAlbum(Long albumId);

    void lowerAlbum(Long albumId);

    /**
     * 根据用户选择关键字/专辑id/专辑标签进行专辑检索
     * @param query 查询参数
     * @return DSL语句
     */
    AlbumSearchResponseVo search(AlbumIndexQuery query);

    /**
     * /1.构建搜索条件
     * @param queryVo 查询参数
     * @return 构建DSL语句
     */
    SearchRequest buildDSL(AlbumIndexQuery queryVo);



    /**
     * .解析检索结果,封装自定义对象
     *
     * @param response 检索结果
     * @param queryVo 查询参数
     * @return 返回相应结果
     */
    AlbumSearchResponseVo parseResult(SearchResponse<AlbumInfoIndex> response, AlbumIndexQuery queryVo);
        //根据一级分类下的三级分类 查询热度排行前6的对象信息
    List<Map<String, Object>> getByCategory3Top6(Long category1Id);

    // 将上架专辑中 专辑标题 专辑作者名称 存入提词索引库

    void saveSuggestDoc(AlbumInfoIndex albumInfoIndex);

    List<String> completeSuggest(String keyword);


    List<String> parseSuggestResult(SearchResponse<SuggestIndex> searchResponse, String suggestName);

    //构建热度排行,根据一级分类id/统计类型查询ES
    void updateLatelyAlbumRanking();
    /**
     * 获取Redis中不同分类下不同排序方式-专辑排行榜 获取最终结果的
     *
     * @param category1Id
     * @param dimension
     * @return
     */
    List<AlbumInfoIndex> getRankingList(Long category1Id, String dimension);
}
